#pragma once
#include <stdint.h>

namespace KRPC {

enum MsgMode {
	RPC_REQ = 1,	//RPC请求信息
	RPC_REP = 2,	//RPC回复信息
	RPC_SUB = 3,	//RPC订阅信息
	RPC_PUB = 4,	//RPC发布信息
	RPC_NOT_FOUND = 5,	//未找到rpc服务
	RPC_NOT_MATCH = 6,	//rpc调用的参数不匹配
	RPC_HEARTBEAT = 7,	//rpc心跳信息
	RPC_NO_ACCESS = 8,	//无权限调用RPC服务
};

#define MAX_RPCNAME_LEN 	36 		//rpc名称的最大长度

#pragma pack(push, 1)
struct MsgHead
{
	uint32_t	len:26;		//数据包长度,包含头部
	uint32_t	ver:2;		//版本,0:没有校验(本地连接使用),1:增加了CRC32校验(外部连接使用)
	uint32_t	mode:4;		//消息模式，取值如enum MsgMode
	uint32_t 	id;			//id标识唯一消息
	char		name[MAX_RPCNAME_LEN];	//rpc调用的函数名或者订阅的主题名
	uint32_t	crc32;		//CRC32校验值
	char 		data[0];	//msgpack序列化的数据
};
#pragma pack(pop)

} //end of namespace KRPC
